package com.videoweb.domain.agent.repository;

import com.videoweb.domain.agent.entity.Agent;

import java.util.List;
import java.util.Optional;

/**
 * Agent仓储接口
 * 定义Agent聚合根的数据访问抽象
 */
public interface AgentRepository {
    
    /**
     * 保存Agent
     */
    Agent save(Agent agent);
    
    /**
     * 根据ID查找Agent
     */
    Optional<Agent> findById(Long id);
    
    /**
     * 根据ID和用户ID查找Agent
     */
    Optional<Agent> findByIdAndUserId(Long id, Long userId);
    
    /**
     * 根据用户ID查找所有Agent
     */
    List<Agent> findByUserId(Long userId);
    
    /**
     * 根据用户ID和状态查找Agent
     */
    List<Agent> findByUserIdAndStatus(Long userId, Integer status);
    
    /**
     * 根据Agent类型查找
     */
    List<Agent> findByAgentType(String agentType);
    
    /**
     * 根据名称模糊查找
     */
    List<Agent> findByNameContaining(String name, Long userId);
    
    /**
     * 检查名称是否存在（同一用户下）
     */
    boolean existsByNameAndUserId(String name, Long userId);
    
    /**
     * 更新Agent
     */
    Agent update(Agent agent);
    
    /**
     * 删除Agent
     */
    void deleteById(Long id);
    
    /**
     * 软删除Agent（设置状态为禁用）
     */
    void softDeleteById(Long id);
    
    /**
     * 统计用户的Agent数量
     */
    long countByUserId(Long userId);
    
    /**
     * 分页查询用户的Agent
     */
    List<Agent> findByUserIdWithPagination(Long userId, int page, int size);
    
    /**
     * 查找所有启用的公共Agent
     */
    List<Agent> findPublicAgents();
}